namespace Digitalmes.Application.Mes.Processes.StepStandards;

/// <summary>
/// 工艺标准 DTO 对象。
/// </summary>
public sealed class ProcStepStandardDto : Dto
{
    /// <summary>
    /// 关联的工艺步骤 ID（工序级别）。
    /// </summary>
    public long StepId { get; set; }

    /// <summary>
    /// 关联的工步 ID（工步级别），若不为工步则设置为 0，表示标准适用于整道工序。
    /// </summary>
    public long StepTaskId { get; set; }

    /// <summary>
    /// 工艺参数名称（如温度、行程、压力、拧紧角度、拧紧扭矩等）
    /// </summary>
    [NotNull]
    public string? ParameterName { get; set; }

    /// <summary>
    /// 工艺参数编码
    /// </summary>
    [NotNull]
    public string? ParameterCode { get; set; }

    /// <summary>
    /// 对应设备的信号点位。
    /// </summary>
    public string? Symbol { get; set; }

    /// <summary>
    /// 信号点位索引（数组值）。
    /// </summary>
    /// <remarks>若点位为数组，指定数组索引，从 1 开始</remarks>
    public int SymbolIndex { get; set; }

    /// <summary>
    /// 工艺参数标准值。
    /// </summary>
    /// <remarks>
    /// True/False 代表检测结果判定，其他值必须为数字类型。
    /// </remarks>
    public string? StandardValue { get; set; }

    /// <summary>
    /// 参数允许偏差范围（如 ±2°C）
    /// </summary>
    public string? Tolerance { get; set; }

    /// <summary>
    /// 工艺参数下限值
    /// </summary>
    public double? MinLimit { get; set; }

    /// <summary>
    /// 工艺参数上限值
    /// </summary>
    public double? MaxLimit { get; set; }

    /// <summary>
    /// 测量单位（如°C, mm, 秒）
    /// </summary>
    public string? MeasurementUnit { get; set; }

    /// <summary>
    /// 参数的检测方法（如仪器名称或方法描述）
    /// </summary>
    public string? InspectionMethod { get; set; }

    /// <summary>
    /// 换算因子，1 表示按原值，10、100、1000 表示实际值要放大对应倍数，0.1、0.01、0.001 表示实际值要缩小对应倍数。
    /// </summary>
    public string? Conversion { get; set; }

    /// <summary>
    /// 保留的小数位，0 表示不截取。
    /// </summary>
    public int? Digits { get; set; }

    /// <summary>
    /// 归属（Operation->工序；Workstep->工步）
    /// </summary>
    [NotNull]
    public string? Owner { get; set; }
    public string? CreatedBy { get; set; }

    public DateTime CreatedTime { get; set; }

    public string? UpdatedBy { get; set; }

    public DateTime? UpdatedTime { get; set; }
}
